Computer file systems have traditionally involved some mechanism of data storage at a physical location (for instance, a disk sector) and a lookup table or index of some sort identifying the data and its physical address (or a logical address from which that may be inferred). The tables are implemented in various forms, and generally require the ability to overwrite or update previous table entries as file system additions and changes occur. These approaches have the following disadvantages:    (a) there is a dependency on the file system to operate with specific storage media types (for example, rewritable)    (b) The file system is non-portable across different operating systems and media    (b) Only the current filesystem state is available. There is no inherent historical record of changes or additions.    (c) There are inefficiencies added when conventional file systems are extended to provide logging of changes.
Examples of table based file systems are the Unix File System (UFS) and its' associated directory tables and inodes, Windows FAT16, FAT32 (“File Allocation Table”) file systems, and Windows NTFS, based on Master File Tables. Other file system designs extend existing file systems by adding journaling and logging to improve reliability and recoverability, and file versioning.
Computer file systems generally fall into the following classes:                1. “Inode” based with directory tables (Unix UFS, FFS, ext2/ext3)        2. File Allocation Table (FAT) based file systems (FAT16/FAT32, etc.)        3. Master File Table (MFT) based (Microsoft NTFS) using tables and index files to create metadata.        4. Journaling file systems (generally inode based, with separate journal)        5. Versioning file systems (VMS, OpenVMS, Cedar: table/inode like internal structures)        6. Log Structured file systems (LFS, Sprite LFS: UFS like internal structures and inode map tables written sequentially)        
Implementations of all of the above file systems require the ability to update or overwrite previously written metadata tables and data areas on the media, and are reliant upon rewritable tables, indexes, or inode maps.
Master File Table (MFT) file systems such as NTFS from Microsoft, are heavily designed around the use of rewritable tables and indexes, which are maintained in specially allocated metadata files.
Journaling file systems are designed to improve reliability and recoverability after a crash or failure affecting the system. The journal component of such file systems records changes since a “checkpoint” or point in time at which the file system was known to be consistent, and to which it can be restored by reference to the recorded changes since “checkpoint”. The journal component typically reuses space that was allocated to it, and is not integral to the file system itself, other than for the purpose of improving reliability. The journal's contents are generally limited to only those changes since the last checkpoint.
Versioning file systems maintain a file in its original form, and any subsequent changes are saved using the same file name and an incrementing version number. The number of historical versions available is generally limited and application or implementation dependent. The file's versions are generally implemented as “saves” of separate files with a naming convention for addressing specific different versions of the file in some sequence or order. These systems are generally implemented at a level closer to the user than the disk operating systems or low-level file systems to which this invention is directed.
Log-based file systems are perhaps the closest of the prior art to this invention. Sprite and LFS, as described in Mendel Rosenblum's and John K. Ousterhout's 24 July 1991 paper “The Design and Implementation of a Log-structured File System”, published in the “Proceedings of the 13th ACM Symposium on Operating System Principles” and the February 1992 “ACM Transactions on Computer Systems”, are typical of this family of file systems, and are generally implemented using internal structures that are patterned after a conventional table-based file system, such as UFS. The logging component records standard file system structures, such as inodes and directory entries, and adds a mapping table that describes the current location of all allocated inodes. The complete inode mapping table is then rewritten regularly to the end of the log, and is then used in a conventional manner to navigate the current file system structure.
It is, therefore, desirable to provide a computer file system which overcomes at least some of the deficiencies of the prior art systems or provides for added functionality not present in the prior art.